﻿//6.1.4 StringBuilder
//StringBuilder类（System.Text命名空间）表示一个可变（可编辑）的字符串。
//使用StringBuilder，可以Append、Insert、Remove和Replace子字符串，而不需要替换整个StringBuilder。

//StringBuilder的构建函数可以选择接受一个初始字符串值，以及其内部容量的初始值（默认是16个字符）。
//如果需要更大的容量，那么StringBuilder会自动调整它的内部结构，以容纳（会有一些性能开销）最大的容量（默认为int.MaxValue）。
//StringBuilder的一个普遍使用方法是通过重复调用Append来创建一个长字符串。
//这个方法比复杂连接普通字符串类型要高效得多：

using System;
using System.Text;

namespace _155_字符串与文本处理_字符串_StringBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            //for (int i = 0; i < 50; i++)
            //    sb.Append(i + ",");
            //因为 i+"" 表示重复连接字符串，这会带来极小的性能开销，
            //为了实现最大的性能，修改如下：
            for (int i = 0; i < 50; i++)
            {
                sb.Append(i.ToString());
                sb.Append(",");
            }
            Console.WriteLine(sb.ToString());

            //AppendLine执行新添加一行字符串（在Windows中是“\r\n”）的Append操作。
            //AppendFormat接受一个组合格式字符串，与String.Format类似。
            
            //如果要清除StringBuilder的内容，我们可以创建一个新的StringBuilder或者将它的Length设为0.
            //警告：将StringBuilder的Length设置为0不会减小它的内部容量。所以，如果StringBuilder之前包含一百万个字符，那么在将它的长度设置为0后，它仍然会占用约2MB的内存。如果释放内存，那么必须创建一个新的StringBuilder，然后允许将旧的对象清除出引用范围（可以被垃圾回收器回收）。
            Console.ReadKey();
        }
    }
}
